/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ClassesListas;

import ClassesUnicas.ComboBoxMultiData;
import ClassesUnicas.Pessoa;
import DAO.DAOPessoa;
import DAO.MySQL.DAOPessoaMySQL;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 * Pessoas
 *
 * Versao 1.0
 *
 * Data Criação 04/12/2013
 *
 * @author Igor
 */
public class Pessoas {

    //Atributos
    private ArrayList<Pessoa> pessoas;
    private DAOPessoa pessoaDAO;

    //Construtores
    public Pessoas() {
        this.pessoas = new ArrayList<Pessoa>();
        this.pessoaDAO = new DAOPessoaMySQL();
    }

    //Getters e Setters
    /**
     * @return the pessoas
     */
    public ArrayList<Pessoa> getPessoas() {
        return pessoas;
    }

    /**
     * @param pessoas the pessoas to set
     */
    public void setPessoas(ArrayList<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }

    /**
     * Adiciona uma pessoa no ArrayList
     *
     * @param pessoa
     */
    public void setPessoas(Pessoa pessoa) {
        this.pessoas.add(pessoa);
    }

    /**
     * @return the pessoa DAOPessoa
     */
    public DAOPessoa getPessoaDAO() {
        return pessoaDAO;
    }

    //Outrs Metodos
    /**
     * Lista, o ArrayList de pessoas, na tabela passada como parametro
     *
     * @param tabela
     */
    public void listarPessoas(JTable tabela) {
        DefaultTableModel dtm = (DefaultTableModel) tabela.getModel();
        int i = 0;

        /*while (dtm.getRowCount() != 0) {
         dtm.removeRow(0);
         }*/
        String[] colunas = new String[]{"Código", "Nome", "CPF"};

        dtm = new DefaultTableModel(colunas, 0) {
            public boolean isCellEditable(int row, int col) {
                if (col >= 0 && col <= 7) {
                    return false;
                } else {
                    return true;
                }
            }
        };

        tabela.setModel(dtm);

        tabela.getColumnModel().getColumn(0).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(200);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(tabela.getWidth() - 300);

        i = 0;
        while (i < pessoas.size()) {
            String codigo = Long.toString(pessoas.get(i).getIdPessoa());
            String nome = pessoas.get(i).getNome();
            String cpf = pessoas.get(i).getCpf();

            dtm.addRow(new Object[]{codigo, nome, cpf});   // um "" para cada coluna
            i++;
        }
        dtm.getRowCount();
    }

    /**
     * Lista, o ArrayList de pessoas, na tabela passada como parametro
     *
     * @param tabela
     */
    public void listarPessoasCheckBox(JTable tabela) {
        DefaultTableModel dtm = (DefaultTableModel) tabela.getModel();
        int i = 0;

        /*while (dtm.getRowCount() != 0) {
         dtm.removeRow(0);
         }*/
        String[] colunas = new String[]{"Check", "Código", "Nome", "CPF"};

        dtm = new DefaultTableModel(colunas, 0) {
            public boolean isCellEditable(int row, int col) {
                switch (col) {
                    case 0: //Check
                        return true;
                    default:
                        return false;
                }
            }

            public Class getColumnClass(int c) {
                switch (c) {
                    case 0:
                        return Boolean.class;
                    default:
                        return String.class;
                }
            }
        };

        tabela.setModel(dtm);

        tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(200);
        tabela.getColumnModel().getColumn(3).setPreferredWidth(tabela.getWidth() - 300);


        i = 0;
        while (i < pessoas.size()) {
            String codigo = Long.toString(pessoas.get(i).getIdPessoa());
            String nome = pessoas.get(i).getNome();
            String cpf = pessoas.get(i).getCpf();

            dtm.addRow(new Object[]{false, codigo, nome, cpf});   // um "" para cada coluna
            i++;
        }
        dtm.getRowCount();
    }

    /**
     * Lista, em um comboBox, as pessoas
     *
     * @param comboBox
     */
    public void listarPessoas(JComboBox comboBox) {
        DefaultComboBoxModel dtm = (DefaultComboBoxModel) comboBox.getModel();

        int i = 0;

        //Limpa a tabela
        comboBox.removeAllItems();

        comboBox.addItem(new ComboBoxMultiData(0, 0, "<Escolha um item>"));
        i = 0;
        while (i < getPessoas().size()) {
            long codigo = getPessoas().get(i).getIdPessoa();
            String nome = getPessoas().get(i).getNome();
            comboBox.addItem(new ComboBoxMultiData(codigo, 0, nome));
            i++;
        }
    }

    /**
     * Grava, no Banco de Dados, a pessoa passada como parametro
     *
     * @param pessoa
     * @return
     */
    public String gravaPessoa(Pessoa pessoa) throws Exception {
        return pessoaDAO.gravaPessoa(pessoa);
    }

    /**
     * Busca a pessoa com ID igual ao passado como parametro
     *
     * @param idPessoa
     * @return
     */
    public Pessoa localizaPessoa(long idPessoa) {
        for (int i = 0; i < pessoas.size(); i++) {
            if (idPessoa == pessoas.get(i).getIdPessoa()) {
                return pessoas.get(i);
            }
        }

        return null;
    }

    /**
     * Busca a pessoa com Nome igual ao passado como parametro
     *
     * @param nome
     * @return
     */
    public Pessoa localizaPessoa(String nome) {
        for (int i = 0; i < pessoas.size(); i++) {
            if (pessoas.get(i).getNome().equals(nome)) {
                return pessoas.get(i);
            }
        }

        return null;
    }
}
